package it.unipd.dei.bd.icineasti.servlet;

import it.unipd.dei.bd.icineasti.database.CreateUtenteDatabase;
import it.unipd.dei.bd.icineasti.resource.Utente;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.codec.digest.DigestUtils;


/**
 * Riceve tutti i parametri relativi ad un utente e lo inserisce nel database.
 * 
 * La password viene crittata nel formato md5 senza uso di salting.
 * 
 * Migliorie possibili:
 * - verifica dell'esistenza dell'indirizzo email;
 * - verifica della sintassi del codice fiscale
 * 		(già effettuata in javascript nel sito web ma andrebbe fatta qui!);
 * - verifica dell'esistenza della carta di credito (con una transazione fittizia?);
 * 
 * @author Bardelle Renzo
 * @version 1.00
 */
public class CreateUtenteServlet extends AbstractDatabaseServlet {

	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		res.setContentType("text/html");

		PrintWriter out = res.getWriter();

		int id = -1;
		String email = req.getParameter("email");
		String password = DigestUtils.md5Hex(req.getParameter("password"));
		String cognome = req.getParameter("cognome");
		String nome = req.getParameter("nome");
		String codfiscale = req.getParameter("codfiscale");
		String cartacredito = req.getParameter("cartacredito");
		Timestamp ultimoaccesso = new Timestamp(System.currentTimeMillis());
		boolean attivo = true;
		boolean newsletter = (Boolean.valueOf(req.getParameter("newsletter"))).booleanValue();
		boolean amministrativo = false;
		boolean verificato = false;
		
		Utente u = new Utente(id, email, password, cognome,nome, codfiscale, cartacredito, ultimoaccesso, attivo, newsletter, amministrativo, verificato);

		Connection con = null;
		
		try {
			con = DS.getConnection();

			new CreateUtenteDatabase(con, u).createUtente();

		} catch (NullPointerException ex) {
			out.printf("<p><font color=\"red\" size=\"+2\">Impossibile creare la connessione al database.</font></p>");
		} catch (SQLException ex) {
			out.printf(
					"<p><font color=\"red\" size=\"+2\">Errore durante l'accesso al database: %s</font></p>",
					ex.getMessage());
		}

		out.flush();
		out.close();
	}

}
